// lib/models/mall_user.dart
import 'package:json_annotation/json_annotation.dart';

part 'user.g.dart';

/// DateTime 兼容转换器：支持 ISO 字符串或毫秒时间戳；序列化输出 ISO8601 字符串
class FlexibleDateTime implements JsonConverter<DateTime?, Object?> {
  const FlexibleDateTime();

  @override
  DateTime? fromJson(Object? json) {
    if (json == null) return null;
    if (json is int) {
      // 认为是毫秒时间戳
      return DateTime.fromMillisecondsSinceEpoch(json);
    }
    if (json is String && json.isNotEmpty) {
      return DateTime.tryParse(json);
    }
    return null;
  }

  @override
  Object? toJson(DateTime? object) => object?.toIso8601String();
}

@JsonSerializable()
class UserInfo {
  /// 后端是 uint64；若你的用户量特别大并在 Web 端运行，建议把类型改成 String 避免 53 位精度问题。
  final int id; // 用户ID
  final String username; // 用户名
  final String email; // 用户邮箱
  final String phone; // 用户手机号
  final String nickname; // 用户昵称
  final String avatar; // 用户头像 URL
  final int gender; // 0:未知 1:男 2:女

  @FlexibleDateTime()
  final DateTime? birthdate; // 用户出生日期（可空）

  final bool hasLoginPwd; // 是否有登录密码
  final bool hasPayPwd; // 是否有支付密码
  final int status; // 0:禁用 1:正常
  final double balance; // 用户余额

  const UserInfo({
    required this.id,
    required this.username,
    required this.email,
    required this.phone,
    required this.nickname,
    required this.avatar,
    required this.gender,
    required this.birthdate,
    required this.hasLoginPwd,
    required this.hasPayPwd,
    required this.status,
    required this.balance,
  });

  factory UserInfo.fromJson(Map<String, dynamic> json) =>
      _$UserInfoFromJson(json);
  Map<String, dynamic> toJson() => _$UserInfoToJson(this);
}
